View Javadoc

1   /***
2    * @version $Revision: 1.4 $
3    */
4   package uba.db.sql.interpreter;
5   
6   import java.util.Collections;
7   import java.util.Iterator;
8   import java.util.List;
9   
10  import uba.db.column.Column;
11  import uba.db.sql.language.ColumnName;
12  import uba.db.sql.language.QualifiedColumnName;
13  import uba.db.sql.language.VisitorBehavior;
14  import uba.db.table.Table;
15  
16  public class ColumnsToProjectVisitor extends VisitorBehavior {
17      private SelectQueryPlan queryPlan;
18  
19      public ColumnsToProjectVisitor(SelectQueryPlan plan) {
20          queryPlan = plan;
21      }
22  
23      public void visitColumnName(ColumnName columnName) {
24          queryPlan.addColumnToProject(findColumnSpecificationIn(queryPlan.tables(),
25                                                                 columnName));
26      }
27  
28      public void visitQualifiedColumnName(QualifiedColumnName qualifiedColumnName) {
29          List tables = Collections.singletonList(queryPlan.tableNamed(qualifiedColumnName
30                  .tableName()));
31          queryPlan.addColumnToProject(findColumnSpecificationIn(tables,
32                                                                 qualifiedColumnName
33                                                                         .columnName()));
34      }
35  
36      public Column findColumnSpecificationIn(List tables,
37              ColumnName columnName) {
38          Iterator iterator = tables.iterator();
39          Column column = null;
40  
41          while (iterator.hasNext() && column == null) {
42              Table table = (Table) iterator.next();
43              column = table.columnNamed(columnName.nameAsString());
44          }
45  
46          return column;
47      }
48  }